#while循环
x = 1
while x <= 100:
 print(x)
 x += 1

#for循环：只要能够使用for循环，就不要使用while循环
words = ['this', 'is', 'an', 'ex', 'parrot']
for word in words:
 print(word)#效果也是遍历整个words列表
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
 print(key, 'corresponds to', d[key])

#一些迭代工具
#并行迭代
names = ['anne', 'beth', 'george', 'damon']
ages = [12, 45, 32, 102]
for i in range(len(names)):
 print(names[i], 'is', ages[i], 'years old')
#迭代时获取索引——enumerate()函数
for index, name in enumerate(names):
 print(index, '-', name)
#zip函数的压缩与解压
list(zip(names,ages))#此处将数据整理成[('anne', 12), ('beth', 45), ('george', 32), ('damon', 102)]
for names,ages in zip(names,ages):
 print(names,'is',ages,'years old')
#反向迭代和排序后再迭代_reversed和sorted函数
#sorted返回一个列表（sorted将字符串列表化并排序）
sorted('Hello, world!')#其输出为[' ', '!', ',', 'H', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
reversed('Hello, world!')#此时会返回一个可迭代对象，但不能输出——如果输出会是“<reversed object at 0x0000023546EF29A0>”
#此处可以使用join或者list方法来，对返回的迭代对象进行转换
print(''.join(reversed('Hello，world!')))#!dlrow，olleH
print(list(reversed('Hello，world!')))#[['!','d', 'l', 'r', 'o', 'w', '，', 'o', 'l', 'l', 'e', 'H']
#跳出循环
#break
from math import sqrt#sqrt()求平方根
for n in range(99, 0, -1):
 root = sqrt(n)#这里会从99从上往下尝试
 if root == int(root):#平方根为整数
  print(n)
  break#本段求的就是一个范围内最大的的最大平方值（整数与自己相乘的结果）
#continue结束当前迭代，并跳到下一次迭代开头，使用较少。while True/break的使用较多
#while True/break成例——
#将条件放在了循环体内的一条if语句中，而这条if语句将在条件满足时调用break。这说明并非只能像常规while循环那样在循环开头结束循环，而是可在循环体的任何地方结束循环。
#if/break行将整个循环分成两部分：第一部分负责设置（如果使用常规while循环，将重复这部分），第二部分在循环条件为真时使用第一部分初始化的数据。
while True:
 word = input('Please enter a word: ')
 if not word : break #符合这个条件就break
 # 使用这个单词做些事情：
 print('The word was ', word)
#else
from math import sqrt
for n in range(99, 81, -1):
 num = sqrt(n)
 if num == int(num):
  print(n)
  break
else:
 print("Didn't find it!")
#列表推导是一种从其他列表创建列表的方式，类似于数学中的集合推导。
#列表推导与for循环
lst =  [(x, y) for x in range(3) for y in range(3)]
print(lst)
result = []
for x in range(3):
 for y in range(3):
  result.append((x, y))
print(result)
#稍微复杂一点的列表推导————将名字的首字母相同的男孩和女孩配对
girls = ['alice', 'bernice', 'clarice']
boys = ['chris', 'arnold', 'bob']
team = [b+'+'+g for b in boys for g in girls if b[0] == g[0]] #b[0] == g[0]是指单词的第一个字母相同
print(team)
#更佳的解决方案————将名字的首字母相同的男孩和女孩配对
girls = ['alice', 'bernice', 'clarice']
boys = ['chris', 'arnold', 'bob']
letterGirls = {}
for girl in girls:
 letterGirls.setdefault(girl[0], []).append(girl)#采集女孩名字开头字母的列表
print([b+'+'+g for b in boys for g in letterGirls[b[0]]])
#补充三个语句：pass、del和exec
#pass：因为在Python中代码块不能为空。要修复这个问题，只需在中间的代码块中添加一条pass语句即可
if name == 'Ralph Auldus Melish':
 print('Welcome!')
elif name == 'Enid':
 # 还未完成……
 pass #比如说这段代码还没有想好怎么写，或者这段做什么，就可以先用pass
elif name == 'Bill Gates':
 print('Access Denied')
#使用 del 删除——同第2章和第4章使用这条语句来删除序列和字典
#函数exec将字符串作为代码执行
